package main

import "fmt"

func main() {
	// 算术运算符
	fmt.Println(5 + 3) // 8
	fmt.Println(5 - 3) // 2
	fmt.Println(5 * 3) // 15
	fmt.Println(5 / 3) // 1
	fmt.Println(5 % 3) // 2
	
	// 位运算符
	fmt.Println(5 ^ 3) // 6 (按位异或)
	fmt.Println(5 & 3) // 1 (按位与)
	fmt.Println(5 | 3) // 7 (按位或)
	fmt.Println(5 << 3) // 40 (左移)
	fmt.Println(5 >> 3) // 0 (右移)

	// 关系运算符
	fmt.Println(5 == 3) // false
	fmt.Println(5!= 3) // true
	fmt.Println(5 > 3)  // true
	fmt.Println(5 < 3)  // false
	fmt.Println(5 >= 3) // true
	fmt.Println(5 <= 3) // false

	// 逻辑运算符
	fmt.Println(true && false) // false
	fmt.Println(true || false) // true
	fmt.Println(!true)        // false

	// 赋值运算符
	a := 5
	a += 3 // a = a + 3
	fmt.Println(a) // 8
	a -= 3 // a = a - 3
	fmt.Println(a) // 5
	a *= 3 // a = a * 3
	fmt.Println(a) // 15
	a /= 3 // a = a / 3
	fmt.Println(a) // 5
	a %= 3 // a = a % 3
	fmt.Println(a) // 2

	// 其他运算符,取地址和取值
	b := 5
	ptr := &b
	fmt.Println(ptr) // 0xc000014080
	fmt.Println(*ptr) // 5

}